package com.bw.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bw.common.GiteeUtils;
import com.bw.common.TokenUtils;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class GiteeBindController {

    @Autowired
    UserMapper userMapper;

    @RequestMapping("/callbackCode.do")
    public String callbackCode(String code, HttpServletRequest request, HttpServletResponse response){
        System.out.println("接收到的临时授权码：" + code);

        // 2. 根据临时授权码 获取token （通过远程的http调用，访问gitee的服务器）
        String tokenByCode = GiteeUtils.getAccessTokenByCode(code);

        System.out.println("根据临时授权码获取到的 token" + tokenByCode);

        //3. 根据token获取gitee用户信息 (（通过远程的http调用，访问gitee的服务器）)
        JSONObject userInfoByToken = GiteeUtils.getGiteeUserInfoByToken(tokenByCode);
        System.out.println("根据token获取到的gitee用户信息 " + JSON.toJSONString(userInfoByToken));

        // 账号的合并 （gitee账号 合并至 当前登录用户）
        // 当前登录用户
        User loginUserFromRequest = TokenUtils.getLoginUserFromRequest(request, User.class);
        // 解析gitee账号的三个字段 ，不需要获取个人空间地址，因为 已经有用户名了
        String nickName = userInfoByToken.getString("name");
        String avatarUrl = userInfoByToken.getString("avatar_url");
        Integer giteeId = userInfoByToken.getInteger("id");

        // 执行账号的合并（ 修改当前登录用户）
        loginUserFromRequest.setNickName(nickName);
        loginUserFromRequest.setGiteeId(giteeId);
        loginUserFromRequest.setAvatarUrl(avatarUrl);

        userMapper.updateUser(loginUserFromRequest);

        // 重新加密用户信息
        TokenUtils.responseTokenByCookie(loginUserFromRequest,response);

        return "redirect:list.do";
    }
}
